SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO


CREATE PROCEDURE [dbo].[paDiasTrabajados] 
-- <DESCRIPCION> Cuenta las cantidad de dias trabajados por un docente entre un rango de fechas.
-- <CONSIDERACIONES ESPECIALES>  
-- <TABLAS> tb_ServiciosAgentes, tb_SubServiciosAgentes, tb_Plazas
-- <PROCEDIMIENTOS> 
@Agente INT,
@P_FDesde DATETIME,
@P_FHasta DATETIME,
@SitRev VARCHAR(1), -- S = Suplentes funcionales y comunes, T = Titulares,  I = Interinos, * = TODOS 
@TotalDeDias INT OUTPUTWITH RECOMPILE
AS

SET DATEFORMAT dmy

DECLARE @MFA DATETIME
DECLARE @MFB DATETIME
DECLARE @RFA DATETIME
DECLARE @RFB DATETIME
DECLARE @RBaja VARCHAR(1)
DECLARE @ContDias INT
DECLARE @msg VARCHAR(200)
DECLARE @Total INT, @diasadicionales INT

SELECT @ContDias = 0, @Total = 0, @TotalDeDias = 0


DECLARE Servicios INSENSITIVE CURSOR FOR
SELECT  CASE WHEN S.FechaAlta < @P_FDesde THEN @P_FDesde ELSE S.FechaAlta END AS FechaAlta, S.Baja,
	  CASE WHEN S.FechaBaja > @P_FHasta THEN @P_FHasta ELSE S.FechaBaja END FechaBaja
FROM tb_ServiciosAgentes s
WHERE s.Agente=@agente 
AND ( (S.FechaBaja IS NULL) OR (S.FechaBaja IS NOT NULL AND S.FechaBaja >= @P_FDesde) )
AND S.FechaAlta<@P_FHasta AND S.fechaalta >= @P_FDesde 
AND ((@SitRev = 'S' AND S.SituacionRevista IN (3,4))
	OR (@SitRev = 'I' AND S.SituacionRevista IN (2))
	OR (@SitRev = 'T' AND S.SituacionRevista IN (1))
	OR (@SitRev = '*'))
ORDER BY S.FechaAlta
FOR READ ONLY

OPEN Servicios

FETCH NEXT FROM Servicios INTO @RFA,@RBaja,@RFB

-- Considera la posibilidad de Cursor Vacio
IF @@FETCH_STATUS=0
	SELECT @MFA=@RFA,@MFB=dateadd(day,0,@RFA),@ContDias=0

IF @RFA < @P_FDesde
	SELECT @RFA = @P_FDesde

-- Recorrido del Cursor (Proyeccion sobre X)
WHILE @@FETCH_STATUS=0 
	BEGIN	
	
	IF @RBaja='N' OR @RFB>@P_FHasta
		SELECT @RFB=@P_FHasta

	IF @RFA>@MFB
	BEGIN

			SELECT @ContDias=@ContDias+(DATEDIFF(DAY,@MFA,@MFB)+1)

			SELECT @MFA=@RFA,@MFB=@RFB
	END

	ELSE
			BEGIN
				IF  @RFB>@MFB 
					SELECT @MFB=@RFB
			END
	
	FETCH NEXT FROM Servicios INTO @RFA,@RBaja,@RFB	
	
END

CLOSE Servicios
DEALLOCATE Servicios

SELECT @ContDias=@ContDias+(DATEDIFF(DAY,@MFA,@MFB)+1)

SELECT @TotalDeDias = @ContDias
GO
